package org.example.study1;

// Java多线程基础用法的类
public class Demo01_Thread {
    // Java程序主入口
    public static void main(String[] args) {
        // 实例化自定义线程对象
        MyThread01 myThread01 = new MyThread01();

        // 启动线程（注意不是直接调用run()）
        // start()会触发JVM创建新线程，自动调用run()
        // 主线程继续向下执行
        myThread01.start(); //  启动线程，申请操作系统中的PCB，启动线程之后一个Java中的Thread对象和操作系统中的PCB相对应

        // 若错误使用myThread01.run()：
        // 1. 不会创建新线程
        // 2. 变成普通方法调用，执行流仍在主线程
        // 3. 后续的无限循环会阻塞主线程
    }
}

/**
 * 自定义线程类（继承Thread方式）
 * 适用场景：需要重写或扩展Thread类方法时
 * 对比Runnable的优势：可直接使用this获取当前线程
 */
class MyThread01 extends Thread {   // 自定义线程是一个类

    /**
     * 线程（任务定义区），任务什么都可以，根据自己的业务需求去写代码
     * 注意：不要手动调用，应由start()触发执行
     */
    @Override
    public void run() {
        // 典型线程任务结构：长期运行的操作
        while (true) {
            System.out.println("hello my thread...");
        }
    }
}


/*输出：一直循环
hello my thread...
hello my thread...
hello my thread...
hello my thread...
hello my thread...
hello my thread...
......
* */